package br.com.esrestaurante.faces;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import br.com.esrestaurante.dao.AberturaDAO;
import br.com.esrestaurante.dao.ContaDAO;
import br.com.esrestaurante.dao.PedidoDAO;
import br.com.esrestaurante.entidades.Abertura;
import br.com.esrestaurante.entidades.Conta;
import br.com.esrestaurante.entidades.Pedido;
import br.com.esrestaurante.entidades.Usuario;

public class InicialClienteFaces extends Faces {

	private Usuario clienteLogado;
	
	private Calendar dataAberturaMesa;
	
	private float consumoAtual;
	
	private List<Pedido> listaPedidosAbertos;
	
	private Abertura ultimaAbertura;
	
	private boolean exibeInfo;
	
	private boolean exibePedAberto;

	
	public InicialClienteFaces() {
		
		
		clienteLogado = getUsuarioLogado();
		
		ultimaAbertura = new AberturaDAO().recuperarUltimaAberturasClietne(clienteLogado);
		
		
		if(ultimaAbertura != null && ultimaAbertura.getDataFechamento() == null) {
			exibeInfo = true;
			dataAberturaMesa = ultimaAbertura.getDataAbertura();
			 
			Conta contaAberta = new ContaDAO().recuperarContaPorAbertura(ultimaAbertura);
					
			List<Pedido> listaPedidos = new PedidoDAO().recuperarPedidosPorConta(contaAberta);
			listaPedidosAbertos = new ArrayList<Pedido>();
			consumoAtual = 0;
			for (Pedido pedido : listaPedidos) {
				if (pedido.getDataEntrega() == null) {
					listaPedidosAbertos.add(pedido);
				}else{
					consumoAtual+=pedido.getValorTotal();
				}
			}
		}else {
			exibeInfo = false;
		}
	}
	
	private boolean possueMesaAberta() {
		
		clienteLogado = getUsuarioLogado();		
		Abertura abertura = new AberturaDAO().recuperarUltimaAberturasClietne(clienteLogado);
				
		if(abertura == null) {
		
			return false;
		
		}else {
			if (abertura.getDataFechamento()!= null) {
				return false;
			}
		}
		return true;
	}
	
	public String abrirMesaAction() {
		
		return "toAbrirMesa";
	}
	
	public String consultarCardapioAction() {
		
		return "toConsultarCardapio";
	}

	public String fecharMesaAction() {
		
		return "toFecharMesa";
	}
	
	public String gerenciarContaAction() {
		
		return "toGerenciarConta";
	}

	public Usuario getClienteLogado() {
		return clienteLogado;
	}

	public void setClienteLogado(Usuario clienteLogado) {
		this.clienteLogado = clienteLogado;
	}

	public Calendar getDataAberturaMesa() {
		return dataAberturaMesa;
	}

	public void setDataAberturaMesa(Calendar dataAberturaMesa) {
		this.dataAberturaMesa = dataAberturaMesa;
	}
	

	public float getConsumoAtual() {
		return consumoAtual;
	}

	public void setConsumoAtual(float consumoAtual) {
		this.consumoAtual = consumoAtual;
	}

	public List<Pedido> getListaPedidosAbertos() {
		return listaPedidosAbertos;
	}

	public void setListaPedidosAbertos(List<Pedido> listaPedidosAbertos) {
		this.listaPedidosAbertos = listaPedidosAbertos;
	}

	public Abertura getUltimaAbertura() {
		return ultimaAbertura;
	}

	public void setUltimaAbertura(Abertura ultimaAbertura) {
		this.ultimaAbertura = ultimaAbertura;
	}

	public boolean isExibirBtAbrirMesa() {
		return possueMesaAberta();
	}

	public boolean isExibeInfo() {
		return exibeInfo;
	}

	public void setExibeInfo(boolean exibeInfo) {
		this.exibeInfo = exibeInfo;
	}

	public boolean isExibePedAberto() {
		return exibePedAberto;
	}

	public void setExibePedAberto(boolean exibePedAberto) {
		this.exibePedAberto = exibePedAberto;
	}
	
}
